using System;
using System.Collections.Generic;
using System.ServiceModel;
using Xyz.Service.DataTransferObjects;

namespace Xyz.Service.ServiceContracts
{
    [ServiceContract(SessionMode = SessionMode.Required)]
    public interface IBookingService
    {
        [OperationContract]
        List<BookingDTO> GetPaymentDueBookings(DateTime paymentDueDate, string firstName, string lastName);

        [OperationContract]
        List<BookingDTO> GetBookingsByCustomer(int customerId);

        [OperationContract]
        BookingDTO GetBooking(string bookingCode);

        [OperationContract]
        string CreateBooking(BookingDTO booking);

        [OperationContract]
        void CancelBooking(int bookingId);

        [OperationContract]
        void SetMemberPayment(MemberPaymentDTO memberPayment, BookingDTO booking);

        [OperationContract]
        void SetCardPayment(CardPaymentDTO cardPayment, BookingDTO booking);

        [OperationContract]
        List<PaymentMethodDTO> GetPaymentMethods();

        [OperationContract]
        List<CardTypeDTO> GetCardTypes();

        [OperationContract]
        List<AirportDTO> GetAirports();

        [OperationContract]
        FlightDTO GetFlightStatus(String flightCode, DateTime FlightDate, String FlightAirport, bool IsArrival);

        [OperationContract]
        AircraftDTO getAircraftByFlightId(int flightId);

        [OperationContract]
        void InsertFlight(FlightDTO flight);

        [OperationContract]
        List<AircraftDTO> GetAircrafts();

        [OperationContract]
        List<TerminalDTO> GetTerminalByAirportId(string airportCode);

        [OperationContract]
        List<FlightDTO> GetFlights();

        [OperationContract]
        FlightDTO GetFlightByFlightId(int flightId);

        [OperationContract]
        void UpdateFlight(FlightDTO flight);

        [OperationContract]
        void DeleteFlight(int flightId);

        [OperationContract]
        List<FlightDTO> GetFlightsByFlightCode(string flightCode);

        [OperationContract(Name = "GetFlightByDepartureInfo")]
        List<FlightDTO> GetFlights(DateTime departureDate, String departureAirport, String arrivalAirport);

        [OperationContract]
        Boolean IsBookedSeat(int flightId, int aircraftSeatId);

        [OperationContract]
        FlightSeatDTO SaveBlockFlightSeat(FlightSeatDTO flightSeatDto);

        [OperationContract]
        void CancelBlockFlightSeat(int flightSeatId);
    }
}